An application may be executed in a wide variety of contexts to provide desired functionality to a user. The application, for instance, may be executed on a wide variety of computing devices, each being implemented to provide different functionality in different settings, such as a set-top box, a laptop computer, a personal digital assistant (PDA), a tablet personal computer (PC), and so forth. Additionally, the computing device may execute the application such that it communicates with another application that is executed on another computing device that provides a context to the application, such as a browser that communicates with a web application that provides a web page for output by the browser. In another instance, the application may be configured for use by servers arranged as a server “farm”. The application, for example, may be executed by each server in a server farm to respond to web page requests by providing the desired web page.
Because of the wide variety of computing devices that may execute the application and the wide variety of functionality that may be provided by the computing devices, the application may encounter a wide variety of execution contexts. An execution context may be thought of as circumstances and conditions which contain the execution of the application, such as the hardware and/or software resources available to the application when it is executed, where the application is executed (e.g., network address), network resources of a computing device that executes the application, and so on. For example, each of the servers in the server farm may provide a different execution context for execution of the application, such as by having differing amounts of processing and memory resources, different network addresses, different device drivers, and so on. Additionally, each computing device that communicates with the application when executed in a server farm may have a different execution context.
Previously, each computing device was supplied with a particular configuration file that included configuration data which was specific for that computing device. For example, in the previously described server farm scenario, each server having a particular execution context (e.g., particular hardware and software resources) was provided with a corresponding configuration file that contained configuration data that was specific for that execution context, such as a configuration file having configuration data for a particular address for purposes of load balancing. Therefore, each new server that was added to the server farm that had a different execution context required a new configuration file, which was both time consuming to develop and inefficient to implement. For example to make a change to the application for execution in a new execution context, a software developer was forced to modify each configuration file to implement the desired change.
Accordingly, there is a continuing need for a configuration system that can provide configuration data to applications for execution in different contexts.